import pandas as pd
import glob
import os
from datetime import datetime


def merge_excel_files(data_dir='data',res_dir = "res"):
    # 查找包含指定字母的Excel文件
    file_mapping = {
        'R': glob.glob(os.path.join(data_dir, '*R*.xlsx'))[0],
        'L': glob.glob(os.path.join(data_dir, '*L*.xlsx'))[0],
        'C': glob.glob(os.path.join(data_dir, '*C*.xlsx'))[0],
        'G': glob.glob(os.path.join(data_dir, '*G*.xlsx'))[0]
    }

    # 读取各个文件
    dfs = {}
    for key, file_path in file_mapping.items():
        try:
            # 读取Excel文件
            df = pd.read_excel(file_path)
            # 确保第一列名为'freq'
            if df.columns[0] != 'freq':
                df = df.rename(columns={df.columns[0]: 'freq'})
            dfs[key] = df
            print(f"成功读取文件: {file_path}")
        except Exception as e:
            print(f"读取文件 {file_path} 时出错: {e}")
            return None

    # 按R、L、C、G的顺序合并所有数据框
    merged_df = dfs['R']
    for key in ['L', 'C', 'G']:
        merged_df = pd.merge(merged_df, dfs[key], on='freq', how='outer')

    # 按频率排序
    merged_df = merged_df.sort_values('freq').reset_index(drop=True)

    # 分别处理频率列和其他列的科学计数法格式
    # 频率列：8位精度科学计数法
    freq_formatted = merged_df['freq'].apply(lambda x: f"{x:.8e}" if pd.notnull(x) else x)

    # 其他列：20位精度科学计数法
    other_columns = merged_df.drop('freq', axis=1)
    other_formatted = other_columns.applymap(lambda x: f"{x:.20e}" if pd.notnull(x) else x)

    # 合并处理后的列
    formatted_df = other_formatted.copy()
    formatted_df['freq'] = freq_formatted

    # 确保freq列在第一列
    cols = ['freq'] + [col for col in formatted_df.columns if col != 'freq']
    formatted_df = formatted_df[cols]

    # 生成包含年月日时分的文件名前缀
    current_datetime = datetime.now().strftime("%Y%m%d_%H%M")

    # 保存为Excel文件
    excel_file = os.path.join(res_dir, f'{current_datetime}_mData.xlsx')
    formatted_df.to_excel(excel_file, index=False)
    print(f"Excel文件已保存至: {excel_file}")

    # 保存为TXT文件，使用制表符分隔
    txt_file = os.path.join(res_dir, f'{current_datetime}_mData.txt')
    # 处理NaN值，替换为空字符串
    formatted_df.fillna('', inplace=True)
    # 保存为TXT，使用制表符分隔，不包含索引
    formatted_df.to_csv(txt_file, sep='\t', index=False)
    print(f"TXT文件已保存至: {txt_file}")

    return formatted_df


if __name__ == "__main__":
    merge_excel_files()
